package Commons.Logging;

import globalmonitor.ElementoMappa;
import globalmonitor.Notifica;
import java.util.HashMap;
import java.util.Map.Entry;

/**Questa classe modella il singolo log...
 *
 * @author Team5
 */
public class Log {
    private String tipoEntita;
    private String idEntita;
    private String timestamp;
    private String operazione;
    private HashMap<Integer,Integer> vectorClock;
    private int numerooperazione;

   
    /**
     * Campo necessario per trasferire le informazioni del vectorClock
     * necessarie per la gestione dell'ordinamento del logging globale
     */


    
    /**
     * Costruttore di default
     */
    public Log(){
        this.tipoEntita="tipoEntita";
        this.idEntita="idEntita";
        this.operazione="operazione";
        this.timestamp="timestamp";
        this.vectorClock= new HashMap<Integer,Integer>();
        numerooperazione=0;
    }
    /**
     * Costruttore con parametri
     */
    public Log(String tipoEntita, String idEntita, String operazione, String timestamp){
        this.tipoEntita=tipoEntita;
        this.idEntita=idEntita;
        this.operazione=operazione;
        this.timestamp=timestamp;
        this.vectorClock= new HashMap<Integer,Integer>();
        numerooperazione=0;

    }
     public int getNumerooperazione() {
        return numerooperazione;
    }

    public void setNumerooperazione(int numerooperazione) {
        System.out.println("Log: ho settato il numerooperazione : "+ numerooperazione);
        this.numerooperazione = numerooperazione;
    }
    
    public String getTipoEntita(){
        return this.tipoEntita;
    }
    public String getOperazione(){
        return this.operazione;
    }
    public String getTimestamp(){
        return this.timestamp;
    }
    public String getIdEntita(){
        return this.idEntita;
    }
    public HashMap<Integer,Integer> getVectorClock(){
        return this.vectorClock;
    }

    public void setTipoEntita(String tipoEntita){
        this.tipoEntita=tipoEntita;
    }
    public void setOperazione(String operazione){
        this.operazione=operazione;
    }
    public void setTimestamp(String timestamp){
        this.timestamp=timestamp;
    }
    public void setIdEntita(String idEntita){
        this.idEntita=idEntita;
    }
    public void setVectorClock(HashMap<Integer,Integer> vectorClock){
        this.vectorClock=vectorClock;
    }
   

    @Override
    public String toString(){
        return "Log: "+this.tipoEntita+" "+this.idEntita+" "+this.operazione+" "+this.timestamp;
    }



    public void XML(){


    }

    public Notifica marshal() {
        Notifica notifica = new globalmonitor.Notifica();
        globalmonitor.MappaVectorClock mvc = new globalmonitor.MappaVectorClock();
        for (Entry infoEntita : this.getVectorClock().entrySet()) {
            ElementoMappa e = new ElementoMappa();
            e.setKey((Integer)infoEntita.getKey());
            e.setValue((Integer)infoEntita.getValue());
            mvc.getEntry().add(e);
        }
        notifica.setMappaVectorClock(mvc);
        notifica.setIdEntita(this.getIdEntita());
        notifica.setTipoEntita(this.getTipoEntita());
        notifica.setOperazione(this.getOperazione());
        notifica.setTimestamp(this.getTimestamp());
        notifica.setNumerooperazione(this.getNumerooperazione());
        return notifica;
    }


}
